/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package mundial;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.jgap.FitnessFunction;
import org.jgap.IChromosome;
import org.jgap.impl.IntegerGene;

/**
 *
 * @author Jorge Mejia
 */
public class MundialFitnessFunction extends FitnessFunction {

    List equipos = new ArrayList();
    List ranking = new ArrayList();

    public MundialFitnessFunction(List equipos, List genres) {
        this.equipos = equipos;
        this.ranking = genres;
    }

    public MundialFitnessFunction() {
    }

    @Override
    protected double evaluate(IChromosome chromosome) {
        double score = 0;
        double imdbScore = 0;

        List dups = new ArrayList();
        int badSolution = 1;

        for (int i = 0; i < chromosome.size(); i++) {

            IntegerGene agene = (IntegerGene) chromosome.getGene(i);
            int index = (Integer) chromosome.getGene(i).getAllele();

            if (dups.contains(index)) {
                badSolution = 0;
            } else {
                dups.add(index);
            }
            RankingFifa equipo=(RankingFifa) equipos.get(index);

          
            double genreScore = getGenreScore(equipo);
            if (genreScore == 0) {
                badSolution = 0;
            }
        double a= Double.parseDouble(equipo.getPartido2());
         double b= Double.parseDouble(equipo.getPartido3());
            score = score + (genreScore);

        }
        return (score * badSolution);
       
  }

  public int getGenreScore(RankingFifa equipo) {
        int copas = 0;
        int Rankingc = 0;
        int partido3=0;
        int partido2=0;
        int partido1=0;
        int total  = 0;

        
        
         int c= Integer.parseInt(equipo.getCopas());
         int d= Integer.parseInt(equipo.getRanking());
         int e= Integer.parseInt(equipo.getPartido2());
         int f= Integer.parseInt(equipo.getPartido3());
         int g= equipo.getPartido1();
        String grupo=equipo.getGrupo();
        
         
         if(e == 1){
             partido2= partido2 +1;
         }
          if(e == 0){
             partido2= partido2;
         }
          if(e == -1){
             partido2= partido2 - 1;
         }
            if(f == 1){
             partido3= partido3 +1;
         }
          if(f == 0){
             partido3= partido3 ;
         }
          if(f == -1){
             partido3= partido3 - 1;
         }
            if(g == 1){
             partido1= partido1 +1;
         }
          if(g == 0){
             partido1= partido1;
         }
          if(g == -1){
             partido1= partido1 - 1;
         }
        if (c > 0) {
            copas = c ;
        }
        if(c == 0){
            copas=0;
        }
        
        if ((d >= 1) && (d<=10)){
            Rankingc = Rankingc + 18;
            
        }
        
        if ((d>= 11) && (d<=20)){
            Rankingc = Rankingc + 15;
        }
        
        if ((d>= 21) && (d<=30)){
            Rankingc = Rankingc + 12;
        }
        
        if ((d>= 31) && ((d)<=40)){
            Rankingc = Rankingc + 9;
        }
        
        if ((d>= 41) && (d<=50)){
            Rankingc = Rankingc + 6;
        }
        
        if ((d>= 51) && (d<=60)){
            Rankingc = Rankingc + 3;
        }
        
        total = copas + Rankingc + partido3 + partido2 + partido1;
        
        return total;
    }
}
